package com.jprocms.module.cms.dal.dataobject.vote;

import com.jpro.framework.tenant.core.db.TenantBaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.jprocms.module.cms.dal.dataobject.voteitem.VoteItemDO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import static com.jprocms.module.cms.constant.VoteConstants.*;

/**
 * 投票 DO
 *
 * @author jprocms
 */
@TableName("cms_vote")
@KeySequence("cms_vote_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库，可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class VoteDO extends TenantBaseDO {

    /**
     * 状态
     */
    @Schema(description = "状态 0正常 1未启用  2 未开始 3已结束", example = "1")
    public short getStatus() {
        Date now = Calendar.getInstance().getTime();
        if (Boolean.FALSE.equals(getEnabled())) {
            return STATUS_DISABLED;
        } else if (getBeginDate() != null && now.compareTo(getBeginDate()) < 0) {
            return STATUS_NOT_STARTED;
        } else if (getEndDate() != null && now.compareTo(getEndDate()) > 0) {
            return STATUS_HAS_ENDED;
        } else {
            return STATUS_NORMAL;
        }
    }

    @TableField(exist = false)
    private List<VoteItemDO> items = new ArrayList<>();


    /**
     * ID
     */
    @TableId
    private Long id;
    /**
     * 站点ID
     */
    private Long siteId;
    /**
     * 标题
     */
    private String title;
    /**
     * 描述
     */
    private String description;
    /**
     * 开始日期
     */
    private Date beginDate;
    /**
     * 结束日期
     */
    private Date endDate;
    /**
     * 重复投票间隔天数(0:不可重复投票)
     */
    private Integer voteInterval;
    /**
     * 参与人次
     */
    private Integer voteNum;
    /**
     * 模式(1:独立访客,2:独立IP,3:独立用户)
     */
    private Short voteMode;
    /**
     * 是否多选
     */
    private Boolean voteMultiple;
    /**
     * 是否启用
     */
    private Boolean enabled;
    /**
     * 创建人ID
     */
    private Long userId;


    /**
     * 排序值
     */
    private Integer voteSort;

}
